package DoExercise.HSP_ZCY.A015_暴力递归;

import java.util.Stack;

/**
 * 不能使用额外的数据结构，只能通过递归本身实现栈的逆序
 */
public class Code04_使用递归逆序栈
{
    public static void main(String[] args)
    {
        Stack<Integer> test = new Stack<>();
        test.push(1);
        test.push(2);
        test.push(3);
        test.push(4);
        test.push(5);
        reverse(test);
        while (!test.isEmpty())
        {
            System.out.println(test.pop());
        }
    }
    
    public static void reverse(Stack<Integer> stack)
    {
        if (stack.isEmpty()) return;
        int i = f(stack);// 5 4 3 2 1
        reverse(stack);
        stack.push(i);// 5 4 3 2 1
    }
    
    /**
     * 取出栈低位置数据，并保持其他位置数据不变
     *
     * @param stack
     * @return
     */
    public static int f(Stack<Integer> stack)
    {
        int result = stack.pop();
        if (stack.isEmpty())
        {
            return result;
        } else
        {
            int last = f(stack);//last会一直向上返回，其值是最底部的值
            stack.push(result);
            return last;
        }
    }
    
    
}
